package com.example.stuwork.controller;

import com.example.stuwork.common.Result;
import com.example.stuwork.service.OSSService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * OSS文件上传控制器
 */
@RestController
@RequestMapping("/oss")
public class OSSController {

    private static final Logger logger = LoggerFactory.getLogger(OSSController.class);

    @Autowired
    private OSSService ossService;

    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.urlPrefix}")
    private String urlPrefix;

    /**
     * 上传文件
     *
     * @param file 文件
     * @return 文件访问URL
     */
    @PostMapping("/upload")
    public Result<String> uploadFile(@RequestParam("file") MultipartFile file) {
        // 去除bucketName中可能存在的空格
        if (bucketName != null) {
            bucketName = bucketName.trim();
        }
        
        // 打印配置信息，便于调试
        logger.info("OSS配置信息 - bucketName: [{}](长度:{}), endpoint: [{}], urlPrefix: [{}]", 
            bucketName, bucketName != null ? bucketName.length() : 0, endpoint, urlPrefix);
        
        if (file.isEmpty()) {
            return Result.error("上传文件不能为空");
        }
        
        try {
            // 调用OSSService上传文件，获取URL
            String url = ossService.uploadFile(file);
            
            logger.info("OSS服务返回的URL: {}", url);
            
            if (url == null) {
                logger.error("OSS服务返回了null URL");
                return Result.error("文件上传失败，OSS服务返回了空URL");
            }
            
            // 进行URL验证
            if (!url.startsWith("http") || !url.contains("/")) {
                logger.error("OSS返回了无效的URL: {}", url);
                // 添加额外的验证：检查URL是否为固定消息而非实际URL
                if (url.equals("作业以上传成功") || url.equals("文件上传成功")) {
                    logger.error("OSS服务返回了固定消息而非URL: {}", url);
                    return Result.error("OSS配置错误：服务返回了消息文本而非实际URL");
                }
                return Result.error("无法获取有效的文件URL，请检查OSS配置");
            }
            
            // 确保直接返回URL作为data，不要添加额外消息
            return Result.success(url);
        } catch (Exception e) {
            logger.error("文件上传异常: ", e);
            return Result.error("文件上传异常: " + e.getMessage());
        }
    }

    /**
     * 删除文件
     *
     * @param fileUrl 文件URL
     * @return 操作结果
     */
    @DeleteMapping("/delete")
    public Result<Boolean> deleteFile(@RequestParam("fileUrl") String fileUrl) {
        if (fileUrl == null || fileUrl.isEmpty()) {
            return Result.error("文件URL不能为空");
        }
        
        boolean success = ossService.deleteFile(fileUrl);
        if (success) {
            return Result.success("文件删除成功", true);
        } else {
            return Result.error("文件删除失败");
        }
    }
    
    /**
     * 处理文件下载请求
     * 
     * @param url 文件URL
     * @return 下载结果
     */
    @GetMapping("/download")
    public Result<String> downloadFile(@RequestParam("url") String url) {
        if (url == null || url.isEmpty()) {
            return Result.error("文件URL不能为空");
        }
        
        logger.info("文件下载请求，URL: {}", url);
        
        // 直接返回原始URL，前端会直接使用这个URL进行下载
        return Result.success(url, "获取下载链接成功");
    }
} 